#pragma once

namespace	MomogenkyouSystem	{

class Window
{
protected:
	static	HINSTANCE		m_hInstance;
	static	HWND			m_hWnd;
	static	RECT			m_WndRect;
	static	WNDCLASSEX		m_WCEX;

	static	bool			m_bExitProgram;

	static	float			m_fInterval;
	static	float			m_fPrevInterval;

	static	size_t			m_iFrameRate;

	static	std::deque<void (*)(const float &)>	m_Callbacks;
public:

	static	inline	HWND		WindowHandle()	{	return	m_hWnd;			}
	static	inline	HINSTANCE	WindowInstance(){	return	m_hInstance;	}
	static	inline	RECT		ClientArea()	{	return	m_WndRect;		}

	static	inline	size_t		FrameRate()		{	return	m_iFrameRate;	}
	static	inline	float		Interval()		{	return	m_fInterval;	}
	static	inline	float		LastInterval()	{	return	m_fPrevInterval;}


	static	bool				Initialize(	HINSTANCE	hInstance,
											size_t		Width,	
											size_t		Height);
	static	bool				Shutdown();

	static	void				AddCallBack(void * pCallBack);

	static	int					RunProgram();

	static	LRESULT	CALLBACK	WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};

}